package com.example.tokenUtil;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * JWT工具类，用于处理JWT的生成和验证。
 */
@Component
public class JwtTokenUtil {

    /**
     * 从Spring Boot的配置文件中注入JWT的密钥。
     */
    @Value("${jwt.secret}")
    private String jwtSecret;

    /**
     * 从Spring Boot的配置文件中注入JWT Token的过期时间（毫秒）。
     */
    @Value("${jwt.expiration-ms}")
    private int jwtExpirationMs;

    /**
     * 验证传入的JWT Token是否有效。
     *
     * @param authToken 要验证的JWT Token字符串。
     * @return 如果Token有效返回true，否则返回false。
     */
    public boolean validateJwtToken(String authToken) {
        try {
            // 使用密钥解析Token，如果Token无效或过期将抛出异常
            Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(authToken);
            return true;
        } catch (Exception e) {
            // 如果发生异常，记录异常并返回false
            return false;
        }
    }

    /**
     * 从JWT Token中提取用户名。
     *
     * @param token JWT Token字符串。
     * @return Token中的用户名。
     */
    public String getUserNameFromJwtToken(String token) {
        // 解析Token并获取其中的用户名
        return Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody().getSubject();
    }
}
